package cn.cs.controller;

import cn.cs.common.*;
import cn.cs.pojo.FaultType;
import cn.cs.pojo.ServiceType;
import cn.cs.service.FaultTypeService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/faultType")
public class FaultTypeController {
    @Resource
    private FaultTypeService faultTypeService;


    /**
     * 获取所有的服务类型
     * */
    @RequestMapping("/p/getFaultCategory")
    @ResponseBody
    public Dto<ServiceType> getFaultCategory() throws Exception {
        Dto dto=new Dto();
        List<ServiceType> list=faultTypeService.getFaultCategory();
        dto.setData(list);

        return dto;
    }


    /**
     * 根据服务类型ID获取对应的产品类别(两级产品都有)p
     * 列表样式
     * */
    @RequestMapping("/p/getFaultTypeById")
    @ResponseBody
    public Dto<FaultType> getFaultTypeById(HttpServletRequest request, String parentId) throws Exception {
        Dto dto=new Dto();
        List<Map<String,Object>> list=faultTypeService.getFaultTypeById(parentId);
         dto.setData(list);

        return dto;
    }

    /**
     * 根据服务类型ID获取对应的产品类别(两级产品都有)
     * 嵌套样式
     * */
    @RequestMapping("/p/getFaultTypeById2")
    @ResponseBody
    public Dto<FaultType> getFaultTypeById2(HttpServletRequest request, String parentId) throws Exception {
        Dto dto=new Dto();
        List<Map<String,Object>> subList=faultTypeService.getFaultTypeById(parentId);
        dto.setData(subList);

        return dto;
    }
    /**
     * 根据父Id获取所有的二级信息
     * */
    @RequestMapping("/p/getFaultTypeByParentId")
    @ResponseBody
    public Dto<FaultType> getFaultTypeByParentId(HttpServletRequest request, String parentId) throws Exception {
        Dto dto=new Dto();
        List<Map<String,Object>> resultList=faultTypeService.getFaultTypeByParentId(parentId);
        dto.setData(resultList);

        return dto;
    }

    /**
     * 分页查询 故障分类
     * @param pageNumber
     * @param pageSize
     * @return
     * @throws Exception
     * TODO 添加搜索
     */
    @RequestMapping(value = "/csPlatform/getServiceTypeList")
    public Dto getServiceTypeList(Integer pageNumber, Integer pageSize)throws Exception{
        Map<String, Object> param = new HashMap<String, Object>();
        return DtoUtil.returnSuccess("获取成功", faultTypeService.queryServiceTypePageByMap(param, pageNumber, pageSize));
    }

    /**
     * 新增/编辑  故障分类
     * @param serviceType
     * @return
     */
    @RequestMapping(value = "/csPlatform/updateServiceType")
    public Dto updateServiceType(@RequestBody ServiceType serviceType){
        try {
            String msg = "新增成功";
            String typeCode = "code_" + PingYinUtil.getFirstSpell(serviceType.getServiceName());
            serviceType.setServiceCode(typeCode);
            if (EmptyUtils.isEmpty(serviceType.getId())) {
                serviceType.setId(IdWorker.getId());
                faultTypeService.addServiceType(serviceType);
            } else {
//                if("1".equals(serviceType.getId()) || "2".equals(serviceType.getId()) || "3".equals(serviceType.getId()) || "4".equals(serviceType.getId()) ){
//                    return DtoUtil.returnFail("默认故障分类无法修改，请重试", "002");
//                }
                faultTypeService.modifyServiceType(serviceType);
                msg = "修改成功";
            }
            return DtoUtil.returnSuccess(msg, "");
        }catch (Exception e){
            e.printStackTrace();
            return DtoUtil.returnFail("操作失败，请重试", "001");
        }
    }

    /**
     * 分页查询 故障配件分类
     * @param pageNumber
     * @param pageSize
     * @return
     * @throws Exception
     * TODO 添加搜索
     */
    @RequestMapping(value = "/csPlatform/getFaultTypeList")
    public Dto getFaultTypeList(Integer pageNumber, Integer pageSize, String id)throws Exception{
        Map<String, Object> param = new HashMap<>();
        param.put("parentId", id);
        return DtoUtil.returnSuccess("获取成功", faultTypeService.queryFaultTypePageByMap(param, pageNumber, pageSize));
    }

    /**
     * 新增/编辑  故障配件分类
     * @param faultType
     * @return
     */
    @RequestMapping(value = "/csPlatform/updateFaultType")
    public Dto updateFaultType(@RequestBody FaultType faultType){
        try {
            String msg = "新增成功";
            String typeCode = "code_" + PingYinUtil.getFirstSpell(faultType.getFaultName());
            faultType.setFaultCode(typeCode);
            if (EmptyUtils.isEmpty(faultType.getId())) {
                String pid = faultType.getParentId();
                FaultType faultType1 = faultTypeService.getFaultTypeByIdOnlyOne(pid);
                String level = "2";
                if(EmptyUtils.isNotEmpty(faultType1)){
                    level = faultType1.getLevel();
                    level = String.valueOf(Integer.valueOf(level) + 1);
                }
                if(EmptyUtils.isEmpty(faultType.getParentId())){
                    return DtoUtil.returnFail("新增失败，请再父级菜单下新增", "002");
                }
                faultType.setLevel(level);
                faultType.setId(IdWorker.getId());
                faultType.setCreateTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
                faultType.setUpdateTime(faultType.getCreateTime());
                faultTypeService.addFaultType(faultType);
            } else {
                faultType.setUpdateTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
                faultTypeService.modifyFaultType(faultType);
                msg = "修改成功";
            }
            return DtoUtil.returnSuccess(msg, "");
        }catch (Exception e){
            e.printStackTrace();
            return DtoUtil.returnFail("操作失败，请重试", "001");
        }
    }


    /**
     * 获取故障分类 资源树
     * @return
     */
    @RequestMapping(value = "/csPlatform/getFaultTypeTree")
    public Dto getFaultTypeTree() {
        return DtoUtil.returnSuccess("操作成功",faultTypeService.getTypeTree());
    }


    /**
     * 获取故障分类 资源树 前两级别
     * @return
     */
    @RequestMapping(value = "/csPlatform/getFaultType")
    public Dto getFaultType() {
        return DtoUtil.returnSuccess("操作成功",faultTypeService.getFaultType());
    }


    /**
     * 获取故障分类 资源树
     * @return
     */
    @RequestMapping(value = "/csPlatform/getFaultTypeTreeTwo")
    public Dto getFaultTypeTreeTwo() {
        return DtoUtil.returnSuccess("操作成功",faultTypeService.getFaultTypeTree());
    }


    /**
     * 删除故障配件分类
     * @param ids
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/csPlatform/delFaultType")
    public Dto delFaultType(String ids)throws Exception{
        int i = 0;
        for(String id:ids.split(",")){
            i += faultTypeService.deleteFaultTypeById(id);
        }
        if(i>0){
            return DtoUtil.returnSuccess("操作成功", i);
        }else {
            return DtoUtil.returnFail("删除失败，有子分类或有订单数据，无法删除", "001");
        }
    }

    /**
     * 删除故障服务分类
     * @param ids
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/csPlatform/delServiceType")
    public Dto delServiceType(String ids)throws Exception{
        int i = 0;
        for(String id:ids.split(",")){
            if(!"1".equals(id) && !"2".equals(id) && !"3".equals(id) && !"4".equals(id)){
                i += faultTypeService.deleteServiceTypeById(id);
            }
        }
        if(i>0){
            return DtoUtil.returnSuccess("操作成功", i);
        }else {
            return DtoUtil.returnFail("删除失败，有子分类或有订单数据，无法删除", "001");
        }
    }


    /**
     * 根据pid获取下级分类
     * @return
     */
    @RequestMapping(value = "/p/getFaultTypeByPid")
    public Dto getFaultTypeByPid(String pid) {
        pid = EmptyUtils.isEmpty(pid)?"3":pid;
        return DtoUtil.returnSuccess("操作成功",faultTypeService.getFaultTypeByPid(pid));
    }

}
